#include <iostream>
using namespace std;
#include <string>
#define MAX_NUMBER_OF_PEOPLR 100//通讯录中最多联系人个数


//联系人的结构体
typedef struct contacts
{
    string m_name;//联系人名字
    string m_sex;//联系人的性别
    int m_age;//联系人的年龄
    string m_phone;//联系人的电话号码
    string m_addr;//联系人的住址
}contacts;


//通讯录的结构体
typedef struct address_book
{
    contacts a[MAX_NUMBER_OF_PEOPLR];//通讯录中
    int m_size;//通讯录中的联系人个数
}address_book;

//通讯录的菜单函数
void menu()
{
    cout<<"****************************"<<endl;
    cout<<"|     1. 添加联系人        |"<<endl;
    cout<<"|     2. 显示联系人        |"<<endl;
    cout<<"|     3. 删除联系人        |"<<endl;
    cout<<"|     4. 查找联系人        |"<<endl;
    cout<<"|     5. 修改联系人        |"<<endl;
    cout<<"|     6. 清空联系人        |"<<endl;
    cout<<"|     0. 退出通讯录        |"<<endl;
    cout<<"****************************"<<endl;
    cout<<"请输入你想要的操作>>";
}
//联系人添加函数
void add_data(address_book *l)
{
   if(l->m_size==MAX_NUMBER_OF_PEOPLR){
       cout<<"通讯录已经满了无法在添加"<<endl;
       return;
   }
   else{
       string name;
       cout<<"请输入联系人的名字>>";
       while(true){
           cin>>name;
           bool duplicate = false; // 标记是否为重复名字
           for(int i = 0; i < l->m_size; i++){ // 检查是否已经存在该名字
               if(l->a[i].m_name == name){
                   duplicate = true;
                   break;
               }
           }
           if(duplicate){ // 如果重复，要求重新输入
               cout<<"该名字已经存在，请重新输入>>";
           }
           else{
               break; // 如果不重复，添加到数组中并继续添加联系人的其他信息
           }
       }
       l->a[l->m_size].m_name=name;
       string sex;
       cout<<"请输入联系人的性别>>";
       while(true){
           cin>>sex;
           if(sex!="男" && sex!="女"){
               cout<<"请输入正确的性别,请重新输入>>";
           }
           else{
               break;
           }
       }
       l->a[l->m_size].m_sex=sex;
       int age;
       cout<<"请输入联系人的年龄>>";
       cin>>age;
       l->a[l->m_size].m_age=age;
       string phone;
       cout<<"请输入联系人的电话号码>>";
       cin>>phone;
       l->a[l->m_size].m_phone=phone;
       string adder;
       cout<<"请输入联系人的住址>>";
       cin>>adder;
       l->a[l->m_size].m_addr=adder;
       l->m_size++;
   }
   cout<<"联系人添加成功!"<<endl;
   system("pause");
   system("cls");
}
//联系人的显示函数
void print_data(address_book *l)
{
    if(l->m_size==0){
        cout<<"当前通讯录没有联系人！"<<endl;
    }
    else{
        for(int i=0;i<l->m_size;i++){
            cout<<"姓名:"<<l->a[i].m_name;
            cout<<"  年龄:"<<l->a[i].m_age;
            cout<<"  性别:"<<l->a[i].m_sex;
            cout<<"  电话号码:"<<l->a[i].m_phone;
            cout<<"  家庭住址:"<<l->a[i].m_addr<<endl;
        }
    }
    system("pause");
    system("cls");
}
//联系人删除函数
void delete_data(address_book *l)
{
    if(l->m_size==0){
        cout<<"当前通讯录为空不能执行删除操作"<<endl;
    }
    else{
        int i,count=0;
        string name;
        cout<<"请输入你想要删除的联系人名称>>";
        cin>>name;
        for(i=0;i<l->m_size;i++){
            if(l->a[i].m_name==name){
                count=1;
                break;
            }
        }
        if(count==1){
            for(int j=i;j<l->m_size;j++){
                l->a[j].m_addr=l->a[j+1].m_addr;
                l->a[j].m_age=l->a[j+1].m_age;
                l->a[j].m_name=l->a[j+1].m_name;
                l->a[j].m_phone=l->a[j+1].m_name;
                l->a[j].m_sex=l->a[j+1].m_sex;
                l->m_size--;
                cout<<"联系人删除完成"<<endl;
            } 
        }
        else{
            cout<<"你所要删除的联系人不在通讯录中！"<<endl;
        }
    }
    system("pause");
    system("cls");
}
//联系人查找函数
void seek_data(address_book *l)
{
    if(l->m_size==0){
        cout<<"当前通讯录已空无法继续查找"<<endl;
    }
    else{
        int i;
        string name;
        bool found=false;
        cout<<"请输入你所要查找的联系人名字>>";
        cin>>name;
        for(i=0;i<l->m_size;i++){
            if(l->a[i].m_name==name){
                cout<<"这个联系人在通讯录中,信息如下:"<<endl;
                cout<<"姓名:"<<l->a[i].m_name;
                cout<<"  年龄:"<<l->a[i].m_age; 
                cout<<"  性别:"<<l->a[i].m_sex;
                cout<<"  电话号码:"<<l->a[i].m_phone;
                cout<<"  家庭住址:"<<l->a[i].m_addr<<endl;
                found=true;
                break;
            }
        }
        if(!found){
            cout<<"通讯录中没有这个联系人!"<<endl;
        }
    }
    system("pause");
    system("cls");
}
//联系人修改函数
void modify_data(address_book *l)
{
    int i=0;
    string name1;
    int found=0;
    cout<<"请输入你所要修改的联系人的名字>>";
    cin>>name1;
    for(i=0;i<l->m_size;i++){
        if(l->a[i].m_name==name1){
            found=1;
            break;
        }
    }
    if(found==1){
        string name;
        cout<<"请输入联系人的名字>>";
        cin>>name;
        l->a[i].m_name=name;
        string sex;
        cout<<"请输入联系人的性别>>";
        while(true){
            cin>>sex;
            if(sex!="男" && sex!="女"){
                cout<<"请输入正确的性别,请重新输入>>";
            }
            else{
                break;
            }
        }
        l->a[i].m_sex=sex;
        int age;
        cout<<"请输入联系人的年龄>>";
        cin>>age;
        l->a[i].m_age=age;
        string phone;
        cout<<"请输入联系人的电话号码>>";
        cin>>phone;
        l->a[i].m_phone=phone;
        string adder;
        cout<<"请输入联系人的住址>>";
        cin>>adder;
        l->a[i].m_addr=adder;
    }
    else{
        cout<<"你所要修改的联系人不在通讯录中无法修改！";
    }
    system("pause");
    system("cls");
}
//通讯录清空函数
void empty_data(address_book *l)
{
    l->m_size=0;
    cout<<"通讯录已清空"<<endl;
    system("pause");
    system("cls");
}
int main()
{
    address_book l;
    l.m_size=0;
    int input=0;
    do{
        menu();
        cin>>input;
        switch (input){
        case 0:
            cout<<"欢迎下次使用"<<endl;
            break;
        case 1:/*联系人的添加*/
            add_data(&l);
            break;
        case 2:/*显示联系人的信息*/
            print_data(&l);
            break;
        case 3:/*删除联系人*/
            delete_data(&l);
            break;
        case 4:/*查找联系人*/
            seek_data(&l);
            break;
        case 5:/*修改联系人的信息*/
            modify_data(&l);
            break;
        case 6:/*通讯录清空联系人*/
            empty_data(&l);
            break;
        default:
            cout<<"请重新输入合法数字"<<endl;
            break;
        }
    }while(input);
    return 0;
}